﻿#pragma once
#pragma execution_character_set("utf-8")
// 本文件为utf-8 编码格式
// 定义文件，定义各种枚举，结构体


#ifndef __GD__GdDefine__
#define __GD__GdDefine__

#include "CrossApp.h"
#include <iostream>
#include <CrossAppExt.h>
#include <map>
#include "actions/CCActionInterval.h"
#include "actions/CCActionInstant.h"

/* 定义商品详细背景颜色 */
#ifndef GD_COLOR_DEFINE

// 颜色 #009aff
#define GD_COLOR_009aff ccc4(0x0, 0x9a, 0xff, 255)
// 颜色 #129dad
#define GD_COLOR_129dad ccc4(18, 157, 173, 255)
// 颜色 #GD_COLOR_30cb91
#define GD_COLOR_30cb91 ccc4(48, 203, 145, 255)
// 颜色 #323232
#define GD_COLOR_323232 ccc4(50, 50, 50, 255)
// 颜色 #329acc
#define GD_COLOR_329acc ccc4(0x32, 0x9a, 0xcc, 255)
// 颜色 #329acc
#define GD_COLOR_34cd99 ccc4(0x34, 0xcd, 0x99, 255)
// 颜色 #39abca
#define GD_COLOR_39abca ccc4(0x39, 0xab, 0xca, 255)
// 颜色 #3aaccb
#define GD_COLOR_3aaccb ccc4(0x3a, 0xac, 0xcb, 255)
// 颜色 #3bcb91
#define GD_COLOR_3bcb91 ccc4(0x3b, 0xcb, 0x91, 255)
// 颜色 #3e3e3e
#define GD_COLOR_3e3e3e ccc4(0x3e, 0x3e, 0x3e, 255)
// 颜色 #606060
#define GD_COLOR_606060 ccc4(96,96,96,255)
// 颜色 #646464
#define GD_COLOR_646464 ccc4(100,100,100,255)
// 颜色 #68a8c9
#define GD_COLOR_68a8c9 ccc4(104,168,201,255)
// 颜色 #717171
#define GD_COLOR_717171 ccc4(113,113,113,255)
// 颜色 #79ca92
#define GD_COLOR_79ca92 ccc4(121,202,146,255)
// 颜色 #7b8b0c
#define GD_COLOR_7b8b0c ccc4(123,139,12,255)
// 颜色 #8374d4
#define GD_COLOR_8374d4 ccc4(0x83,0x74,0xd4,255)
// 颜色 #8b7769
#define GD_COLOR_8b7769 ccc4(139,119,105,255)
// 颜色 #90bd15
#define GD_COLOR_90bd15 ccc4(0x90,0xbd,0x15,255)
// 颜色 #939393
#define GD_COLOR_939393 ccc4(147,147,147,255)
// 颜色 #95664c
#define GD_COLOR_95664c ccc4(0x95,0x66,0x4c,255)
// 颜色 #969696
#define GD_COLOR_969696 ccc4(150,150,150,255)
// 颜色 #97664b
#define GD_COLOR_97664b ccc4(151,102,75,255)
// 颜色 #97674b
#define GD_COLOR_97674b ccc4(0x97,0x67,0x4b,255)
// 颜色 #999999
#define GD_COLOR_999999 ccc4(153,153,153,255)
// 颜色 #9c958f
#define GD_COLOR_9c958f ccc4(156, 149, 143, 255)
// 颜色 #a09e9f
#define GD_COLOR_a09e9f ccc4(160, 158, 159, 255)
// 颜色 #a579d9
#define GD_COLOR_a579d9 ccc4(165, 121, 217, 255)
// 颜色 #a78971
#define GD_COLOR_a78971 ccc4(167, 137, 113, 255)
// 颜色 #a85e29
#define GD_COLOR_a85c29 ccc4(168, 94, 41, 255)
// 颜色 #a9a9a9
#define GD_COLOR_a9a9a9 ccc4(0xa9, 0xa9, 0xa9, 255)
// 颜色 #a9ca3b
#define GD_COLOR_a9ca3b ccc4(169, 202, 59, 255)
// 颜色 #aacb39
#define GD_COLOR_aacb39 ccc4(0xaa, 0xcb, 0x39, 255)
// 颜色 #ababab
#define GD_COLOR_ababab ccc4(171, 171, 171, 255)
// 颜色 #b2ca41
#define GD_COLOR_b2ca41 ccc4(178, 202, 65, 255)
// 颜色 #b47ddb
#define GD_COLOR_b47ddb ccc4(0xb4, 0x7d, 0xdb, 255)
// 颜色 #b8a28a
#define GD_COLOR_b8a28a ccc4(0xb8, 0xa2, 0x8a, 255)
// 颜色 #c05538
#define GD_COLOR_c05538 ccc4(192,85,56,255)
// 颜色 #c08647
#define GD_COLOR_c08647 ccc4(192,134,71,255)
// 颜色 #c69774
#define GD_COLOR_c69774 ccc4(0xc6,0x97,0x74,255)
// 颜色 #c79772
#define GD_COLOR_c79772 ccc4(0xc7,0x97,0x72,255)
// 颜色 #c7c5c6
#define GD_COLOR_c7c5c6 ccc4(0xc7,0xc5,0xc6,255)
// 颜色 #c87d47
#define GD_COLOR_c87d47 ccc4(0xc8,0x7d,0x47,255)
// 颜色 #c8c8c8
#define GD_COLOR_c8c8c8 ccc4(200,200,200,255)
// 颜色 #GD_COLOR_c97f48
#define GD_COLOR_c97f48 ccc4(0xc9,0x7f,0x48,255)
// 颜色 #GD_COLOR_cc3333
#define GD_COLOR_cc3333 ccc4(0xcc,0x33,0x33,255)
// 颜色 #cccccc
#define GD_COLOR_cccccc ccc4(0xcc,0xcc,0xcc,255)
// 颜色 #cbc0b9
#define GD_COLOR_cbc0b9 ccc4(203,192,185,255)
// 颜色 #cbcbcb
#define GD_COLOR_cbcbcb ccc4(203,203,203,255)
// 颜色 #cb8553
#define GD_COLOR_cb8553 ccc4(203,133,83,255)
// 颜色 #cdc8c2
#define GD_COLOR_cdc8c2 ccc4(205,200,194,255)
// 颜色 #cdcdcd
#define GD_COLOR_cdcdcd ccc4(205,205,205,255)
// 颜色 #ce793b
#define GD_COLOR_ce793b ccc4(0xce,0x79,0x3b,255)
// 颜色 #cec0b7
#define GD_COLOR_cec0b7 ccc4(0xce,0xc0,0xb7,255)
// 颜色 #cecece
#define GD_COLOR_cecece ccc4(206,206,206,255)
// 颜色 #cf4d1a
#define GD_COLOR_cf4d1a ccc4(207,77,26,255)
// 颜色 #d0d0d0
#define GD_COLOR_d0d0d0 ccc4(0xd0,0xd0,0xd0,255)
// 颜色 #d1592c
#define GD_COLOR_d1592c ccc4(209,89,44,255)
// 颜色 #d8d8d8
#define GD_COLOR_d8d8d8 ccc4(216,216,216,255)
// 颜色 #d9bba1
#define GD_COLOR_d9bba1 ccc4(217,187,161,255)
// 颜色 #da5317
#define GD_COLOR_da5317 ccc4(0xda,0x53,0x17,255)
// 颜色 #dabca4
#define GD_COLOR_dabca4 ccc4(218,188,164,255)
// 颜色 #db6b53
#define GD_COLOR_db6b53 ccc4(219,107,83,255)
// 颜色 #dcdcdc
#define GD_COLOR_dcdcdc ccc4(220,220,220,255)
// 颜色 #dd430d
#define GD_COLOR_dd430d ccc4(221,67,13,255)
// 颜色 #ddd4c3
#define GD_COLOR_ddd4c3 ccc4(0xdd,0xd4,0xc3,255)
// 颜色 #dddddd
#define GD_COLOR_dddddd ccc4(0xdd,0xdd,0xdd,255)
// 颜色 #dfdfdf
#define GD_COLOR_dfdfdf ccc4(0xdf,0xdf,0xdf,255)
// 颜色 #e08647
#define GD_COLOR_e08647 ccc4(224,134,71,255)
// 颜色 #e3a354
#define GD_COLOR_e3a354 ccc4(227,163,84,255)
// 颜色 #e5e5e5
#define GD_COLOR_e5e5e5 ccc4(229,229,229,255)
// 颜色 #e6e6e6
#define GD_COLOR_e6e6e6 ccc4(230,230,230,255)
// 颜色 #e96149
#define GD_COLOR_e96149 ccc4(0xe9,0x61,0x49,255)
// 颜色 #e9e9e9
#define GD_COLOR_e9e9e9 ccc4(233,233,233,255)
// 颜色 #eb6234
#define GD_COLOR_eb6234 ccc4(0xeb,0x62,0x34,255)
// 颜色 #ebebeb
#define GD_COLOR_ebebeb ccc4(0xeb,0xeb,0xeb,255)
// 颜色 #eee9e5
#define GD_COLOR_eee9e5 ccc4(238,233,229,255)
// 颜色 #eeeae4
#define GD_COLOR_eeeae4 ccc4(0xee,0xea,0xe4,255)
// 颜色 #eeeeee
#define GD_COLOR_eeeeee ccc4(238,238,238,255)
// 颜色 #f0f0f0
#define GD_COLOR_f0f0f0 ccc4(240, 240, 240, 255)
// 颜色 #f1f1f1
#define GD_COLOR_f1f1f1 ccc4(0xf1, 0xf1, 0xf1, 255)
// 颜色 #f5885d
#define GD_COLOR_f5885d ccc4(245, 136, 93, 255)
// 颜色 #f5a656
#define GD_COLOR_f5a656 ccc4(0xf5, 0xa6, 0x56, 255)
// 颜色 #f5f5f5
#define GD_COLOR_f5f5f5 ccc4(245, 245, 245, 255)
// 颜色 #f66e54
#define GD_COLOR_f66e54 ccc4(0xf6, 0x6e, 0x54, 255)
// 颜色 #f76c55
#define GD_COLOR_f76c55 ccc4(247, 108, 85, 255)
// 颜色 #f9a454
#define GD_COLOR_f9a454 ccc4(249, 164, 84, 255)
// 颜色 #fc339a
#define GD_COLOR_fc339a ccc4(0xfc, 0x33, 0x9a, 255)
// 颜色 #fd373c
#define GD_COLOR_fd373c ccc4(0xfd, 0x37, 0x3c, 255)
// 颜色 #fefefe
#define GD_COLOR_fefefe ccc4(254, 254, 254, 255)
#define GD_COLOR_ff653c ccc4(0xff, 0x65, 0x3c, 255)

// 颜色 #ffffff
#define GD_COLOR_ffffff ccc4(255, 255, 255, 255)
// 颜色 #2eb2c2
#define GD_COLOR_2eb2c2 ccc4(0x2e, 0xb2, 0xc2, 255)
// 颜色 #f0ebe8
#define GD_COLOR_f0ebe8 ccc4(0xf0, 0xeb, 0xe8, 255)
// 白色透明
#define GD_COLOR_ffffff_200 ccc4(255, 255, 255, 240)
// 颜色 #c67e46
#define GD_COLOR_c67e46 ccc4(0xc6, 0x7e, 0x46, 255)
// 颜色 #ff9a33
#define GD_COLOR_ff9a33 ccc4(0xff, 0x9a, 0x33, 255)
// 颜色 #ff3333
#define GD_COLOR_ff3333 ccc4(0xff, 0x33, 0x33, 255)
// 颜色 #ff349a
#define GD_COLOR_ff349a ccc4(0xff, 0x34, 0x9a, 255)
// 颜色 #ffcd33
#define GD_COLOR_ffcd33 ccc4(0xff, 0xcd, 0x33, 255)
// 颜色 #ae7a46
#define GD_COLOR_ae7a46 ccc4(0xae, 0x7a, 0x46, 255)

#endif

#ifndef GD_FONT_DEFINE
#define GD_FONT_Hoefler_Text "fonts/hoeflertext.ttf"
#define GD_FONT_steelfish_rg "fonts/steelfish rg.ttf"

#endif

#ifndef GD_ConfigDataModule_getInstance
#define GD_ConfigDataModule_getInstance ConfigDataModule* cdm = ConfigDataModule::getInstance();
#endif

#ifndef GD_HTTP_RESPONSE_OK 
// 定义http请求返回成功判断
#define GD_HTTP_RESPONSE_OK status == HttpResponseSucceed && json.isMember("error_code") && json["error_code"].asInt() == 0
#endif

/* 商品图标背景颜色数组 */
static const CAColor4B GOODS_ICON_BG_COLORS[10] = { CAColor_black, GD_COLOR_f66e54, GD_COLOR_f5a656, GD_COLOR_aacb39, GD_COLOR_3bcb91, GD_COLOR_f66e54, GD_COLOR_f5a656, GD_COLOR_aacb39, GD_COLOR_3bcb91, CAColor_black };

#ifndef GD_CACHE_PATH
#define ___CACHE_FILE_PATH___ std::string(CCFileUtils::sharedFileUtils()->getWritablePath() + "image")
#endif

#ifndef GD_ORIGIN
	#if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32
		#define ___GD_ORIGIN___ "&origin=app_win32&v=2.0"
	#endif
	#if CC_TARGET_PLATFORM == CC_PLATFORM_IOS
		#define ___GD_ORIGIN___ "&origin=app_ios&v=2.0"
	#endif
	#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
		#define ___GD_ORIGIN___ "&origin=app_android&v=2.0"
	#endif
	#if CC_TARGET_PLATFORM == CC_PLATFORM_LINUX
		#define ___GD_ORIGIN___ "&origin=app_linux&v=2.0"
	#endif
	#if CC_TARGET_PLATFORM == CC_PLATFORM_MAC
		#define ___GD_ORIGIN___ "&origin=app_mac&v=2.0"
	#endif
#endif

/* 设计窗口大小 */
const CCSize design_size = CCSize(640, 1136);
/* 缩放比例 */
extern float design_scale;
/* 是否允许使用后退按钮 */
extern bool keyBackEnable;
/* 图片路径 */
extern std::string GD_IMAGE_PATH;
/* app应用名称 */
extern std::string APP_NAME;
/* app应用名称简称 */
extern std::string APP_NAME_SHORT;
/* app应用版本 */
extern std::string APP_VER;
extern bool IS_DEBUG;
extern std::string GD_DOMAIN;
extern float FONT_SCALE;


typedef enum {
	LoginActionLoginSuccess,
	LoginActionLoginFailed
}LoginAction;


/* 基本结构体 */
struct GdBean{
	bool isNotNull; // 默认为空
	int id; // id
	std::string strId; // 字符串id
	std::string name; // 名字
	std::string value; // 值
	std::string ext; // 扩展字段
public:
	GdBean();
};

struct GdPage{
	int sp; // 当前页数
	int totalPages; // 总页数
	int total; // 总条数
	int pageSize; // 每页条数
public:
	GdPage();
	GdPage(int sp, int totalPages, int total, int pageSize);
	bool isPageEnd(); // 是否是最后一页
};

/* 分享商品网站 */
struct GDGoodsGrabSite{
	bool isNotNull; // 默认为空
	std::string id; // 
	std::string name; // 
	std::string url; // 
public:
	GDGoodsGrabSite();
};

struct GDTopicIcon{
	bool isNotNull; // 默认为空
	std::string id; // ID
	std::string name; // 名称
	std::string color; // 颜色
public:
	GDTopicIcon();
};

/* 精简用户信息 */
struct GDUserShort{
	bool isNotNull; // 默认为空
	std::string _id; // 用户ID
	std::string username; // 用户昵称
	std::string daren; // 达人 0普通会员，1买手，2达人
	std::string fans; // 粉丝数量
	std::string shares; // 分享商品数量
public:
	GDUserShort();
	std::string getDarenTitle(); // 获取达人类型
};

/* 商城 */
struct GDMall{
	bool isNotNull; // 默认为空
	std::string _id; // id
	std::string title; // 标题
	std::string info; // 信息
	std::string country; // 产地
	std::string _img; // 图片
	std::string order_desc; // 购买流程
public:
	GDMall();
};

struct GDImageFilter{
	bool isNotNull; // 默认为空
	int id; // id
	std::string name; // 标题
	std::string value; // 遮罩图片
	float bright; //亮度
	float contrast; // 对比度
	float saturation; // 饱和度
	int hue; // 色相
	int cbr; // 平衡R
 	int cbg; // 平衡G
	int cbb; // 平衡B
public:
	GDImageFilter();
};

/* 品牌 */
struct GDBrand{
	bool isNotNull; // 默认为空
	std::string _id;
	std::string title;
	std::string domain;
	std::string abst;
	std::string country;
	std::string info;
public:
	GDBrand();
};



/*想买*/
struct GDFavs{
	bool isNotNull; // 默认为空
	std::string _id; // id
	std::string uname; // 昵称
	std::string addTime; // 添加时间
	std::string avatar; // 头像
	GDUserShort userShort; // 发布商品的用户信息
	GDFavs();
};

/* 商品图标 */
struct GDGoodsIcon{
	bool isNotNull; // 默认为空
	std::string id; // id
	std::string title; // 名称
public:
	GDGoodsIcon();
};

/* 精简商品 */
struct GDGoodsShort{
	bool isNotNull; // 默认为空
	std::string _id; // id
	std::string uid; // 发布者id
	std::string title; // 标题
    std::string type;  //商品类型
	std::string pic; // 商品大图
	std::string img_color; // 默认颜色
	std::string index_desc; // 首页描述
	std::string price; // 商品价格
	std::string market_price; // 商品原价格
	std::string flow; // 收藏次数
	std::string favs; // 想买人数
	std::string score; // 果冻打分
	std::string describe; //详细描述
	std::string jd_img1; 
	std::string jd_img2; 
	std::string jd_img3;
	std::string currency_type;
	std::string post_time; // 发表时间
    std::string prices_analyse;//
    std::string uname;

	std::string sale_type; // 类型:1.限时特价，2.限量特价,3定制或预约
	std::string expire_time; // 过期时间 时间戳(s)
	std::string left_num; //  剩余数量

	bool is_like; // 是否已经点喜欢

	std::string hits; // 浏览次数
	GDMall mall; // 商城信息
	vector<GDGoodsIcon> goodsIcons; // 商品图标
public:
	GDGoodsShort();
	/* 是否特价类别的商品 */
	bool isSale();
	/* 是否是分享的商品 */
	bool isGrab();
	/* 获取销售信息 根据 sale_type expire_time left_num 处理 */
	std::string getSaleInfo();
};



/*评论*/
struct GDComment{
	bool isNotNull; // 默认为空
	std::string _id; // id
	std::string uid; // 发布者名字
	std::string uname; // 名字
	std::string info; // 评论内容
	std::string sendTime; // 发布时间
	std::string client; // 发布端
	GDUserShort toUser; // 被评论的人
public:
	GDComment();
};


/* 商品标签 */
struct GDGoodsTags{
	bool isNotNull; // 默认为空
	std::string id; // id
	std::string name; // 名称
public:
	GDGoodsTags();
};

struct GDHotLabel{
	std::string id;
	std::string image;
	std::string type;
	std::string describe;
	std::string favs;
	std::string comments;
	std::string hits;
	bool is_like;

	std::string market_price;
	std::string prices;
	std::string currency_type;
};


/* 分享商品标签 */
struct GDGoodsGrabMark
{
public:
	bool isNotNull; // 默认为空
	bool pointMove; // 是否需要重新计算标签的坐标
	int id; // 标签组id,自定义
	int colorType; // 颜色类型

	std::string id1; // id
	std::string name1; // 名称
	std::string title1; // 标题

	int rotation1; // 旋转值 0 不旋转 1 水平翻转
	std::string id2; // id
	std::string name2; // 名称
	std::string title2; // 标题

	int rotation2; // 旋转值 0 不旋转 1 水平翻转
	std::string id3; // id
	std::string name3; // 名称
	std::string title3; // 标题

	int rotation3; // 旋转值 0 不旋转 1 水平翻转
private: // 坐标需要缩放转换，不允许直接修改
	float x; // 坐标
	float y; // 坐标
	float x1; // 坐标
	float y1; // 坐标
	float x2; // 坐标
	float y2; // 坐标
	float x3; // 坐标
	float y3; // 坐标
public:
	GDGoodsGrabMark();
	bool brandIsNull(); // 判断商城，商品名称是否为空
	bool currencyIsNull(); // 判断价格是否为空
	bool countryIsNull(); // 判断国家是否为空
	bool isNull(); // 判断是否为空，没有标签数据
	std::string getMarkInfo(int type);
	CCPoint getMarkPoint(int type);
	CCPoint getMarkPointNoDs(int type);
	void setMarkPoint(int type, const CCPoint& point);
	void setMarkPoint(int type, float x, float y);
	void setMarkPointNoDs(int type, const CCPoint& point);
	void setMarkPointNoDs(int type, float x, float y);
	int getRotation(int type);
	void setRotation(int type, int value);
	void deleteValue(); // 删除所有值
	std::string toJsonString(); // 转换为json字符串
};

/**
 * 定义商品结构体
*/
struct GDGoods{
	bool isNotNull; // 默认为空
	std::string _id; // id
	std::string uid; // 发布者id
	std::string uname; // 发布者名字
	std::string title; // 标题
	std::string pic; // 商品大图
	std::string img_color; // 默认颜色
	std::string url; // 商品Url
	std::string index_desc; // 首页描述
	std::string desc; // 商品描述
	std::string info; // 商品详细描述
	std::string price; // 商品价格
	std::string market_price ; // 商品原价格
	std::string rmb_price; // 人民币价格
	std::string flow; // 收藏次数
	std::string purpose; // 适合对象及用途
	std::string prices_analyse; // 价格分析
	std::string logistics; // 物流支付
	std::string score; // 果冻打分
	std::string product_area; // 产地
	std::string hits; // 浏览次数
	std::string buy_tips; // 购买提示
	std::string comment_count; // 评论数量
	std::string jd_imgs[5]; // 焦点图片
	std::string favs; // 想买人数
	std::string coupon_code; // 优惠码
	std::string mall_id; // 商城Id
	std::string brand_id; // 品牌Id
	std::string post_time; // 发表时间
	std::string currency_type;
	std::string type; // 类型
	std::string sale_type; // 类型:1.限时特价，2.限量特价,3定制或预约
	std::string expire_time; // 过期时间 时间戳(s)
	std::string left_num; //  剩余数量

	bool is_like; // 是否已经点喜欢
	bool is_follow; // 是否关注了发表者
	GDMall mall; // 商城信息
	GDBrand brand; // 品牌故事
	GDUserShort userShort; // 发布商品的用户信息

	vector<GDComment> commentList; // 评论列表
	vector<GDFavs> favsList; // 想买列表
	vector<GDHotLabel> similarGoodsList; // 相似商品列表
	vector<GDHotLabel> recommendGoodsList; // 推荐商品列表
	vector<GDGoodsTags> goodsTags; // 商品标签
	vector<GDGoodsIcon> goodsIcons; // 商品图标
	vector<GdBean> hotTags; // 热门标签
	vector<GDGoodsGrabMark*> tags; // 用户编辑的标签
public :
	GDGoods();
	/* 是否特价类别的商品 */
	bool isSale();
	/* 是否是分享的商品 */
	bool isGrab();
	/* 获取销售信息 根据 sale_type expire_time left_num 处理 */
	std::string getSaleInfo();
};

/* 城市信息 */
struct GDCity{
	bool isNotNull; // 默认为空
	std::string code; // 城市编码
	std::string name; // 城市名称
	std::string parentCode; // 上级城市编码
public:
	GDCity();
	bool hasParentCode(); // 是否有上级城市
};

/* 感兴趣标签 */
struct GDInteresteTags{
	bool isNotNull; // 默认为空
	std::string id; // id
	std::string name; // 名称
	std::string ordid; //  排序顺序
public:
	GDInteresteTags();
};

/* 果冻搜索类别 */
struct GDSearchCates{
	bool isNotNull; // 默认为空
	std::string id;
	std::string name;
	std::string ordid;
	std::string img; // 分类图标
    int type;
	int depth;
	vector<GDSearchCates> subCates;
public:
	GDSearchCates();
};

/* 分享平台结构体 */
struct GDSharePlatform{
	bool isNotNull; // 默认为空
	std::string id; // id
	std::string name; // 名称
	std::string icon; // 图标
public:
	GDSharePlatform();
};

/* 薪水范围 */
struct GDSalaryRange{
	bool isNotNull; // 默认为空
	std::string _id; // 编号
	std::string name; // 名称
public:
	GDSalaryRange();
};

/* 专题 */
struct GDTopic{
	bool isNotNull; // 默认为空
	std::string id; // 编号
	std::string title; // 标题
	std::string topic_icon;
	std::string list_img;
	std::string img;
	std::string uname; 
	std::string favs;
	std::string hits;
	std::string uid;
	std::string img_color;
	std::string describe;
	std::string post_time;
	GDUserShort user;
	GDMall mall;
	GDBrand brand;
public:
	GDTopic();
};

/* 过滤条件item */
struct GdFilterOrderItem{
	bool isNotNull; // 默认为空
	std::string p;
	std::string name;
	int type;
	vector<GdBean> items;
public:
	GdFilterOrderItem();
};

struct GdFilterOrder{
	bool isNotNull; // 默认为空
	
	vector<GdFilterOrderItem> filter; // 过滤条件
	GdFilterOrderItem order; // 排序
public:
	GdFilterOrder();
};


/* 分享商品list */
struct GDGoodsGrab{
	bool isNotNull; // 默认为空
	std::string _id; // id
	std::string uid; // 发布者id
	std::string title; // 标题
	std::string type;  //商品类型
	std::string img; // 商品大图
	std::string img_color; // 商品颜色
	std::string price; // 商品价格
	std::string market_price; // 商品原价格
	std::string flow; // 收藏次数
	std::string favs; // 想买人数
	std::string currency_type;
	std::string post_time; // 发表时间
	std::string rmb_price;// 原价
	std::string uname;
	std::string hits; // 浏览数
	std::string comments; // 评论数
	std::string desc; // 商品描述
	std::string url; // 商品来源url

	bool is_like; // 是否已经点喜欢
	bool is_follow; // 是否已经关注

	vector<GDGoodsGrabMark*> tags; // 用户编辑的标签
	vector<GDFavs> favsUser; // 喜欢用户列表
	vector<GdBean> hotTags; // 热门标签
public:
	GDGoodsGrab();
	std::string getImage640();
	std::string getImage640f();
};



/**
 * 热门标签
 */
struct GDMainHotLabel{
    std::string id;
    std::string title;
    std::string image;
    std::string type;
    std::string g_type;
    vector<GDMainHotLabel> subLabel;
};

GDMainHotLabel parseGDMainHotLabel(const CSJson::Value &value);

struct GDHotLabelFans{
    int num;
    std::string uid;
    std::string shares;
    std::string add_time;
    std::string describe;
    std::string username;
    bool is_follow; // 是否已经关注
};

struct GDHotLabelDetail{
    std::string id;
    std::string title;
    std::string logo;
    std::string describe;
    std::string shares;
    std::string type;
    std::string fansCount;
    bool is_follow;
    
    std::string cid;
    std::string ctitle;
    
    vector<GDHotLabelFans> fans;
};

GDHotLabelDetail parseGDHotLabelDetail(const CSJson::Value &value);



GDHotLabel parseGDHotLabel(const CSJson::Value &value);

GdBean parseGdBean(const CSJson::Value &value, std::string idKey = "id", std::string strIdKey = "strId", std::string nameKey = "name", std::string valueKey = "value", std::string extKey = "ext");

GdFilterOrderItem parseGdFilterOrderItem(const CSJson::Value &value);
GdFilterOrder parseGdFilterOrder(const CSJson::Value &value);

void parseGDPage(GdPage& page, const CSJson::Value &value);

// 解析商品
GDGoods* parseGDGoods(const CSJson::Value &value);
void parseGDGoods(GDGoods& goods, const CSJson::Value &value);
// 解析精简商品
GDGoodsShort parseGDGoodsShort(const CSJson::Value &value);
// 解析商城
GDMall parseGDMall(const CSJson::Value &value);
// 解析评论
GDComment parseGDComment(const CSJson::Value &value);
// 解析想买
GDFavs parseGDFavs(const CSJson::Value &value);
// 解析城市数据
GDCity parseGDCity(const CSJson::Value &value);
// 解析分享平台
GDSharePlatform parseGDSharePlatform(const CSJson::Value &value);
// 解析薪水范围
GDSalaryRange parseGDSalaryRange(const CSJson::Value &value);
// 解析品牌故事
GDBrand parseGDBrand(const CSJson::Value &value);
// 解析精简用户信息
GDUserShort parseGDUserShort(const CSJson::Value &value);
// 解析兴趣商品标签
GDInteresteTags parseGDInteresteTags(const CSJson::Value &value);
// 解析果冻搜索类别
GDSearchCates parseGDSearchCates(const CSJson::Value &value);

// 
GDGoodsTags parseGDGoodsTags(const CSJson::Value &value);
// 
GDGoodsIcon parseGDGoodsIcon(const CSJson::Value &value);
// 
GDTopic parseGDTopic(const CSJson::Value &value);

GDGoodsGrabSite parseGDGoodsGrabSite(const CSJson::Value &value);

GDTopicIcon parseGDTopicIcon(const CSJson::Value &value);

GDGoodsGrab parseGDGoodsGrab(const CSJson::Value &value);

GDGoodsGrabMark* parseGDGoodsGrabMark(const CSJson::Value &value);

GDImageFilter parseGDImageFilter(const CSJson::Value &value);

std::string getFullUrl(string url);

// 缩放像素
float _ds(float px);
// 逆缩放
float _xds(float px);

#endif /* defined(__GD__GdDefine__) */